<?php
/**
 * Zend Framework
 * LICENSE
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 * @category Zend
 * @package Zend_Form
 * @subpackage Decorator
 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license http://framework.zend.com/license/new-bsd New BSD License
 */
/**
 * Zend_Form_Decorator_FormElements
 */
require_once 'Zend/Form/Decorator/FormElements.php';

/**
 * Zend_Form_Decorator_PrepareElements
 * Render all form elements registered with current form
 * Accepts following options:
 * - separator: Separator to use between elements
 * Any other options passed will be used as HTML attributes of the form tag.
 * @category Zend
 * @package Zend_Form
 * @subpackage Decorator
 * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
 * @license http://framework.zend.com/license/new-bsd New BSD License
 * @version $Id: PrepareElements.php 24593 2012-01-05 20:35:02Z matthew $
 */
class Zend_Form_Decorator_PrepareElements extends Zend_Form_Decorator_FormElements {

    /**
     * Render form elements
     * @param string $content
     * @return string
     */
    public function render ($content) {
        $form = $this -> getElement ();
        if (( ! $form instanceof Zend_Form) && ( ! $form instanceof Zend_Form_DisplayGroup)) {
            return $content;
        }
        $this -> _recursivelyPrepareForm ($form);
        return $content;
    }

    protected function _recursivelyPrepareForm (Zend_Form $form) {
        $belongsTo = ($form instanceof Zend_Form) ? $form -> getElementsBelongTo () : null;
        $elementContent = '';
        $separator = $this -> getSeparator ();
        $translator = $form -> getTranslator ();
        $view = $form -> getView ();
        foreach ($form as $item) {
            $item -> setView ($view) -> setTranslator ($translator);
            if ($item instanceof Zend_Form_Element) {
                $item -> setBelongsTo ($belongsTo);
            } elseif ( ! empty ($belongsTo) && ($item instanceof Zend_Form)) {
                if ($item -> isArray ()) {
                    $name = $this -> mergeBelongsTo ($belongsTo, $item -> getElementsBelongTo ());
                    $item -> setElementsBelongTo ($name, true);
                } else {
                    $item -> setElementsBelongTo ($belongsTo, true);
                }
                $this -> _recursivelyPrepareForm ($item);
            } elseif ( ! empty ($belongsTo) && ($item instanceof Zend_Form_DisplayGroup)) {
                foreach ($item as $element) {
                    $element -> setBelongsTo ($belongsTo);
                }
            }
        }
    }

}
